package com.hibox.util;

import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReUtil;
import com.hibox.common.exception.UtilException;

/**
 * 邮箱工具类
 *
 * @author WangFK
 * @version 1.0
 * @since 2023/5/11 14:52
 */
public class MailUtil {

    /**
     * 邮箱正则
     */
    public static final String EMAIL_REGEX = "^[a-z0-9A-Z]+[- | a-z0-9A-Z . _]+@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-z]{2,}$";

    /**
     * 是否是无效邮箱格式
     *
     * @param email 要校验的邮箱
     * @return true:符合，false：不符合
     */
    public static boolean isEmailInvalid(String email) {
        if (ObjectUtil.isEmpty(email)) {
            return false;
        }
        return ReUtil.isMatch(EMAIL_REGEX, email);
    }

    /**
     * 发送普通文本邮件
     *
     * @param email   接受人邮箱
     * @param subject 主题
     * @param content 内容
     * @return
     */
    public static void sendText(String email, String subject, String content) {
        try {
            if (!isEmailInvalid(email)) {
                throw new UtilException("邮箱格式不正确");
            }
            cn.hutool.extra.mail.MailUtil.send(email, subject, content, false);
        } catch (Exception e) {
            throw new UtilException("邮箱发送失败");
        }
    }

    /**
     * 发送html邮件
     *
     * @param email   接受人邮箱
     * @param subject 主题
     * @param content 内容
     * @return
     */
    public static void sendHtml(String email, String subject, String content) {
        if (!isEmailInvalid(email)) {
            throw new UtilException("邮箱格式不正确");
        }
        try {
            cn.hutool.extra.mail.MailUtil.send(email, subject, content, true);
        } catch (Exception e) {
            throw new UtilException("邮箱发送失败");
        }
    }

    /**
     * 发送html邮件 默认失效时间5min
     *
     * @param email
     * @param code
     */
    public static void sendHtml(String email, String code) {
        sendHtml(email, code, 5);
    }

    /**
     * 发送html邮件 设置失效时间
     *
     * @param email
     * @param code
     * @param offset
     */
    public static void sendHtml(String email, String code, Integer offset) {
        String subject = "Hi-Box官方验证码";
        // 前缀
        String contendFix = "<h1>亲爱的用户：您好！</h1>" +
                "    <p>您收到这封电子邮件是因为您 (也可能是某人冒充您的名义) 注册 <b>Hi-Box</b> 账号。假如这不是您本人所申请, 请不用理会这封电子邮件, 但是如果您持续收到这类的信件骚扰, 请您尽快联络管理员。</p>" +
                "   <p>请使用以下验证码完成后续注册账号流程</p><h2><b>";
        // 失效时间
        DateTime Timeout = DateUtil.offsetMinute(DateUtil.date(), offset);

        // 后缀
        String suffix = "</b></h2>" + "  <p>注意：请您收到邮件的五分钟内（<b>" + Timeout + "</b>）前使用，否则验证码将会失效。</p>";
        // 组合
        String contend = contendFix + code + suffix;
        sendHtml(email, subject, contend);
    }


}
